package util

import (
	"github.com/gomodule/redigo/redis"
	"ubt-rbac-service/internal/core/config"
	"ubt-rbac-service/internal/core/logger"
)

var pool *redis.Pool

// InitRedis 启动程序时,就初始化连接池
func InitRedis() {
	pool = &redis.Pool{
		MaxIdle:     10,  // 最大空闲连接数,可以适当调大
		MaxActive:   0,   // 最大连接数,0表示无限制
		IdleTimeout: 300, // 空闲时间,当一个连接300s内空闲,直接放回到连接池中
		Dial:        connRedis,
	}
}

// connRedis 连接Redis缓冲数据库
func connRedis() (redis.Conn, error) {
	cfg := config.GetConfig()
	server := cfg.RdsConfig.IpPort
	option := redis.DialPassword(cfg.RdsConfig.Passwd)
	if conn, err := redis.Dial("tcp", server, option); err == nil {
		return conn, nil
	} else {
		logger.Error("Redis缓冲数据库打开失败。" + err.Error())
		return nil, err
	}
}

func GetRdsConn() redis.Conn {
	return pool.Get()
}

func CloseConn(conn redis.Conn) {
	if err := conn.Close(); err != nil {
		logger.Error("Redis缓冲数据库释放连接失败。" + err.Error())
	}
}
